// hash.hpp
// Hashing function(s) & related stuff.
//
// Copyright (C) 2008  Maksim Sipos <msipos@mailc.net>
//
// This file is a part of the Ripe language project.
//
// Ripe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

#ifndef R_HASH_HPP
#define R_HASH_HPP

#include "standard.hpp"

namespace Ripe {

  // This hash is taken from the code written by Paul Hsieh, retrieved from
  //
  //   http://www.azillionmonkeys.com/qed/hash.html
  //
  // on 2008/03/03. Given data and its length, compute a 32-bit hash.
  uint32_t hash(const char* data, int len);

  // This hash is taken from
  //
  //   http://www.concentric.net/~Ttwang/tech/inthash.htm
  //
  // Use this to compute a hash from an integer.
  uint32_t hash(uint32_t a);
  
  // Find the smallest x such that:
  //    x > n
  //    x < 2^k where k is some integer
  //    x is the biggest such prime
  uint32_t map_prime(uint32_t n);
}

#endif // R_HASH_HPP
